Modern computing devices have become ubiquitous tools for personal, business, and social uses. As such, many modern computing devices are capable of connecting to various data networks, including the Internet and corporate intranets, to retrieve and transmit/receive data communications over such networks. Oftentimes, a computing device connected to one network needs to communicate with a computing device connected on a different network. To facilitate communications between such computing devices, networks typically include one or more network devices (e.g., a network switch, a network router, etc.) to route communications (i.e., network packets) from one computing device to another based on network flows, which are stored in a flow lookup table. Traditionally, network packet processing (e.g., packet switching) has been performed on dedicated network processors of the network devices.
Network virtualization technologies (e.g., network functions virtualization (NFV)) and centralized controller networking architectures (e.g., software-defined networking (SDN)), and usage requirements thereof, have introduced software based network packet processing. Such software based network packet processing has resulted in network infrastructures that support network packet processing being performed on network devices with general purpose processors, thereby increasing scalability, configurability, and flexibility. Typically, a network packet flow identification library uses a hash table (i.e., the flow lookup table) on which to perform network flow lookups. However, during the hashing process, hash collisions may occur.
One such method, Cuckoo-hashing, has emerged as a memory-efficient, high performance hashing scheme for resolving hash collisions during flow lookup table lookups using data plane libraries and network interface controller drivers of a network packet input/output (I/O) engine (e.g., Intel® Data Plane Development Kit (DPDK)) for fast network packet processing (e.g., flow lookup table lookup, software router/switch functionality, etc.). However, read-write concurrency may be necessary to effectively take advantage of Cuckoo-hashing on the general purpose processors. In other words, when a core of the general purpose processor is updating the flow lookup table, another core of the general purpose processor should be able to perform a flow lookup in parallel, without needing to lock the flow lookup table.